package com.t282.crm.redis;

import com.t282.crm.entity.Role;
import com.t282.crm.entity.User;
import com.t282.crm.service.RedisService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTemplateTester {
    @Resource
    private StringRedisTemplate stringRedisTemplate;    //操作字符串数据
    @Resource
    private RedisTemplate redisTemplate;    //操作其他数据类型

    @Resource
    private RedisService redisService;

    /*操作字符串*/
    @Test
    public void testString(){
        stringRedisTemplate.opsForValue().set("name","czkt");
        Assert.assertEquals("czkt",stringRedisTemplate.opsForValue().get("name"));
    }

    /*操作实体*/
    @Test
    public void testObj(){
        User user = new User();
        user.setUsrName("czkt");
        user.setUsrPassword("123456");
        Role role = new Role();
        role.setRoleId(1L);
        user.setRole(role);
        user.setUsrFlag(null);
        ValueOperations<String,User> operations = redisTemplate.opsForValue();
        operations.set("ktjiaoyu.crm.user.czkt",user);
        User u = operations.get("ktjiaoyu.crm.user.czkt");
        System.out.println("user.usrName : " + u.getUsrName());
    }

    /*超时失效*/
    @Test
    public void testExpire() throws InterruptedException {
        User user = new User();
        user.setUsrName("cskt");
        user.setUsrPassword("123456");
        Role role = new Role();
        role.setRoleId(1L);
        user.setRole(role);
        user.setUsrFlag(null);
        ValueOperations<String,User> operations = redisTemplate.opsForValue();
        operations.set("expire",user,100, TimeUnit.MILLISECONDS);
        Thread.sleep(1000);
        boolean exists = redisTemplate.hasKey("expire");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
    }

    /*操作哈希*/
    @Test
    public void testHash(){
        HashOperations<String,Object,Object> hash = redisTemplate.opsForHash();
        hash.put("hash","name","ktjiaoyu");
        String value = (String)hash.get("hash","name");
        System.out.println("hash name'value : " +value);
    }

    /*操作列表*/
    @Test
    public void testList(){
        ListOperations<String,String> list = redisTemplate.opsForList();
        list.leftPush("list","accp");
        list.leftPush("list","bdqn");
        list.leftPush("list","czkt");
        String value = (String)list.leftPop("list");
        System.out.println("list value : " + value.toString());
    }

    /*RedisService*/
    @Test
    public void testRedisService(){
        boolean result = redisService.set("name","ktjiaoyu");
        System.out.println("执行结果：" + result);
        if(result){
            String value = redisService.get("name");
            System.out.println(value);
        }
    }
}
